import Vue from 'vue'
import App from './App.vue'
import VueRouter from "vue-router"
import routes from './routes.js'
import filters from "./filters/index"
import Loading from './components/loading/index.js'
import store from "./store.js"
import axios from "axios"

//TODO:全局注册过滤器
// Vue.filter("formatDateTime", function(dateTime) {   
//     if (dateTime) {
// 		var oDate = new Date();
// 		oDate.setTime(dateTime);
// 		var y = oDate.getFullYear();
// 		var m = oDate.getMonth() + 1;
// 		var d = oDate.getDate();
// 		var h = oDate.getHours();
// 		var m = oDate.getMinutes();
// 		var s = oDate.getSeconds();
// 		return y + '-' + m + '-' + d + ' ' + h + ':' + m + ':' + s;
// 	}else{
// 		return "*";
// 	}
// });

Object.keys(filters).forEach(key => Vue.filter(key, filters[key]))


Vue.use(VueRouter);
Vue.use(Loading);

//TODO:通过options实例化router路由器
const router=new VueRouter({
	routes,	
	mode: 'history',      			//默认hash
	scrollBehavior: (t,f,s) => ({ //因为是单页面应用，默认让滚动条回到0 0 的位置，使得页面看上去真的跳转了一样，这是对一个很难复现的bug修正
		x:0,
		y: 0
	})
});


new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
});

//以上写法等同于
// new Vue({
// 	render:function(createElement){
// 		return createElement(App);
// 	}
// }).$mount("#app");


//TODO:axios基础配置，作者想实现一个类blockUI的功能，我还要继续完善
axios.interceptors.request.use(function (config) {  //配置发送请求的信息
	store.dispatch('showLoading')  
  	return config;
}, function (error) {
  	return Promise.reject(error);
});
axios.interceptors.response.use(function(response) { //请求回来
	store.dispatch('hideLoading')
	return response;
}, function(error) {
	return Promise.reject(error);
});

//TODO:把axios对象挂到Vue原型上,这是一种技巧，这样我们就能直接this.$http.get(),貌似Vue实例方法就有$http这个属性
//		与use方法相比这种做法不是vue第三方插件推荐的做法
Vue.prototype.$http = axios; 